/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.virtual.pregnant.persistencia;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 *
 * @author Leonardo Oliveira Moreira
 *
 */
public class DAO {

    protected Connection connection;

    /**
     * 
     * @throws SQLException 
     */
    public DAO() throws SQLException {
        try {
            Class.forName(getPersistenciaPropriedade("driver"));
            connection = DriverManager.getConnection(getPersistenciaPropriedade("url"), getPersistenciaPropriedade("usuario"), getPersistenciaPropriedade("senha"));
            connection.setAutoCommit(false);
        } catch (ClassNotFoundException ex) {
            throw new SQLException(ex);
        }
    }
    
    /**
     * Método utilizado para persistir um conjunto de operações executadas no
     * banco de dados por meio do DAO
     *
     * @throws SQLException
     */
    public void commit() throws SQLException {
        connection.commit();
    }

    /**
     * Método utilizado para desfazer os efeitos de um conjunto de operações
     * executadas no banco de dados por meio do DAO
     *
     * @throws SQLException
     */
    public void rollback() throws SQLException {
        connection.rollback();
    }
    
    public void close() throws SQLException {
        connection.close();
    }

    /**
     * Método estático utilizado para resgatar, no arquivo de configuração,
     * propriedades voltadas para conexão com o banco de dados
     *
     * @param propriedade
     * @return
     */
    private static String getPersistenciaPropriedade(String propriedade) {
        Properties properties = new Properties();
        try {
            properties.load(DAO.class.getResourceAsStream("persistencia.properties"));
            return properties.getProperty(propriedade);
        } catch (IOException ex) {
            return null;
        }
    }

}